Following tutorials show how to use @Query Annotation to execute DB Queries.
You simply add @Query to a Method and when Method is called it will execute specified SQL and return its result.
SQL can be provided as
● Native Query SELECT * FROM PERSON WHERE NAME='John' AND AGE=20 (nativeQuery = true)
● JPQL SELECT john FROM Person john WHERE john.name = 'John' AND john.age = 20 (default)
Method can then be called like this
● Person person = personRepository.getPersonByNameAgeIndexed(name, age); (return single Record)
● List<Person> persons = personRepository.getPersonsByName(name); (returns List of Records)
If SQL has Parameters, Method will also have Input Parameters
● Indexed Parameters (?1, ?2) => ( String name, int age)
● Named Parameters (:parname, :parage) => (@Param("parname") String name, @Param("parage") int age)
Examples of Native Query Methods
//=======================================================================================
// SELECT
//=======================================================================================
//NO PARAMETERS
@Query(nativeQuery = true, value = "SELECT * FROM PERSON WHERE NAME = 'John' AND AGE = 20")
Person getJohn();
//INDEXED PARAMETERS
@Query(nativeQuery = true, value = "SELECT * FROM PERSON WHERE NAME = ?1 AND AGE = ?2")
Person selectPersonByNameAgeIndexed(String name, Integer age);
//NAMED PARAMETERS
@Query(nativeQuery = true, value = "SELECT * FROM PERSON WHERE NAME = :name AND AGE = :parameterAge")
Person selectPersonByNameAgeNamed(String name, @Param("parameterAge") Integer age);
//RETURN LIST
@Query(nativeQuery = true, value = "SELECT * FROM PERSON WHERE NAME = :name")
List<Person> selectPersonsByName(String name);
//=======================================================================================
// UPDATE
//=======================================================================================
@Modifying
@Query(nativeQuery = true, value = "UPDATE PERSON SET AGE = :newAge WHERE NAME = :name")
Integer updatePersonsByName(String name, Integer newAge);
//=======================================================================================
// DELETE
//=======================================================================================
@Modifying
@Query(nativeQuery = true, value = "DELETE FROM PERSON WHERE NAME = :name")
Integer deletePersonsByName(String name);
//=======================================================================================
// INSERT
//=======================================================================================
@Modifying
@Query(nativeQuery = true, value = "INSERT INTO PERSON (name, age) VALUES (:name, :age)")
Integer insertPerson(String name, Integer age);